package page

import (
	"blog/model"
	"blog/service/data"
	"errors"
	"time"

	"github.com/gin-gonic/gin"
)

type AdminPostPageService struct {
	postDataService *data.PostDataService
}

func NewAdminPostPageService() *AdminPostPageService {
	return &AdminPostPageService{
		postDataService: &data.PostDataService{},
	}
}

// GetPostListByKeyword 根据关键词获取文章列表（后台管理）
func (s *AdminPostPageService) GetPostListByKeyword(ctx *gin.Context, keyWord, tagName string, typeId, pageId, pageSize int64) model.PostListData {
	return s.postDataService.GetPostListByKeyword(ctx, keyWord, tagName, typeId, pageId, pageSize, true)
}

// CreatePost 创建文章（后台管理）
func (s *AdminPostPageService) CreatePost(ctx *gin.Context, post *data.PostDataReal) error {
	// 页面层处理：数据验证
	if post.Title == "" {
		return errors.New("标题不能为空")
	}
	if post.Content == "" {
		return errors.New("内容不能为空")
	}

	// 调用数据服务层创建文章
	return s.postDataService.CreatePostReal(ctx, post)
}

// UpdatePost 更新文章（后台管理）
func (s *AdminPostPageService) UpdatePost(ctx *gin.Context, post *data.PostDataReal) error {
	// 页面层处理：数据验证
	if post.Title == "" {
		return errors.New("标题不能为空")
	}
	if post.Content == "" {
		return errors.New("内容不能为空")
	}

	// 调用数据服务层更新文章
	return s.postDataService.UpdatePostReal(ctx, post)
}

// GetPostByID 根据ID获取文章（后台管理）
func (s *AdminPostPageService) GetPostByID(ctx *gin.Context, id int64) (*data.PostDataReal, error) {
	return s.postDataService.GetPostRealByID(ctx, id)
}

// ValidatePostType 验证文章分类
func (s *AdminPostPageService) ValidatePostType(ctx *gin.Context, postType int64) bool {
	return s.postDataService.CheckAddPostTypeId(ctx, postType)
}

// ValidatePostTitle 验证文章标题
func (s *AdminPostPageService) ValidatePostTitle(title string) (bool, string) {
	return s.postDataService.CheckPostTitle(title)
}

// ValidatePostContent 验证文章内容
func (s *AdminPostPageService) ValidatePostContent(content string) (bool, string) {
	return s.postDataService.CheckPostContent(content)
}

// ParseTimeLayout 解析时间格式
func (s *AdminPostPageService) ParseTimeLayout(timeStr string) (time.Time, error) {
	return time.Parse("2006-01-02 15:04:05", timeStr)
}

// FormatTimeLayout 格式化时间
func (s *AdminPostPageService) FormatTimeLayout(t time.Time) string {
	return t.Format("2006-01-02 15:04:05")
}

// CreatePostDataReal 创建 PostDataReal 实例（页面层）
func (s *AdminPostPageService) CreatePostDataReal() *data.PostDataReal {
	return &data.PostDataReal{}
}
